package com.zqf.shiro.utils;



import com.alibaba.ttl.TransmittableThreadLocal;
import com.zqf.shiro.pojo.LoginUser;

import java.util.Optional;

/**
 * @author zqf
 * @date 12/23/2017
 */
public enum LoginUserUtils {
    ;
    private static TransmittableThreadLocal<LoginUser> userInfo = new TransmittableThreadLocal<>();

    /**
     * 设置用户信息
     **/
    public static void setUser(LoginUser user) {

        userInfo.set(user);
    }

    /**
     * 设置用户信息
     **/
    public static void clear() {
        userInfo.remove();
    }

    /**
     * 获取所有用户信息
     *
     * @return 用户信息
     **/
    public static Optional<LoginUser> getUser() {
        return Optional.ofNullable(userInfo.get());
    }

    /**
     * 获取用户id
     *
     * @return 用户id
     **/
    public static Long getUserId() {
        return getUser()
                .map(LoginUser::getId).get();
    }

    /**
     * 获取用户名
     *
     * @return 用户名
     */
    public static Optional<String> getUsername() {
        return getUser()
                .map(LoginUser::getUsername);
    }


    /**
     * 获取姓名
     *
     * @return 姓名(昵称)
     */
    public static String getName() {
        if (!getUser().map(LoginUser::getUsername).isPresent()){
            throw new IllegalArgumentException("获取用户名称失败");
        }
        return getUser()
                .map(LoginUser::getUsername).get();
    }







    /**
     * 获取jti(唯一登陆随机码)
     *
     * @return jti
     */
    public static Optional<String> getJti() {
        return getUser()
                .map(LoginUser::getJti);
    }

}
